﻿<!DOCTYPE html>
<html lang="en">
<head profile="http://a9.com/-/spec/opensearch/1.1/">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="./site.css" rel="stylesheet">
<title>container/ring</title>
</head>
<body>
<div class="container">
    <h2 id="pkg-overview">package ring</h2>
    <p><code>import "container/ring"</code>
    <p>ring实现了环形链表的操作。</p>
    <h3 id="pkg-index" class="section-header">Index <a class="permalink" href="#pkg-index">&para;</a></h3>
    <ul class="list-unstyled">
        <li><a href="#Ring">type Ring</a></li>
        <ul>
            <li><a href="#New">func New(n int) *Ring</a></li>
            <li><a href="#Ring.Len">func (r *Ring) Len() int</a></li>
            <li><a href="#Ring.Next">func (r *Ring) Next() *Ring</a></li>
            <li><a href="#Ring.Prev">func (r *Ring) Prev() *Ring</a></li>
            <li><a href="#Ring.Move">func (r *Ring) Move(n int) *Ring</a></li>
            <li><a href="#Ring.Link">func (r *Ring) Link(s *Ring) *Ring</a></li>
            <li><a href="#Ring.Unlink">func (r *Ring) Unlink(n int) *Ring</a></li>
            <li><a href="#Ring.Do">func (r *Ring) Do(f func(interface{}))</a></li>
        </ul>
    </ul>
    <span id="pkg-examples"></span>
    <h3 id="Ring">type <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#14">Ring</a> <a class="permalink" href="#Ring">&para;</a></h3>
    <pre>type Ring struct {
    <span id="Ring.Value">Value</span> interface{} <span class="com">// 供调用者使用，本包不会操作该字段</span>
    <span class="com">// 包含隐藏或非导出字段</span>
}</pre>
    <p>Ring类型代表环形链表的一个元素，同时也代表链表本身。环形链表没有头尾；指向环形链表任一元素的指针都可以作为整个环形链表看待。Ring零值是具有一个（Value字段为nil的）元素的链表。</p>
    <h4 id="New">func <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#62">New</a> <a class="permalink" href="#New">&para;</a></h4>
    <pre class="funcdecl">func New(n <a href="https://godoc.org/builtin#int">int</a>) *<a href="#Ring">Ring</a></pre>
    <p>New创建一个具有n个元素的环形链表。</p>
    <h4 id="Ring.Len">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#121">Len</a> <a class="permalink" href="#Ring.Len">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Len() <a href="https://godoc.org/builtin#int">int</a></pre>
    <p>Len返回环形链表中的元素个数，复杂度O(n)。</p>
    <h4 id="Ring.Next">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#26">Next</a> <a class="permalink" href="#Ring.Next">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Next() *<a href="#Ring">Ring</a></pre>
    <p>返回后一个元素，r不能为空。</p>
    <h4 id="Ring.Prev">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#34">Prev</a> <a class="permalink" href="#Ring.Prev">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Prev() *<a href="#Ring">Ring</a></pre>
    <p>返回前一个元素，r不能为空。</p>
    <h4 id="Ring.Move">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#44">Move</a> <a class="permalink" href="#Ring.Move">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Move(n <a href="https://godoc.org/builtin#int">int</a>) *<a href="#Ring">Ring</a></pre>
    <p>返回移动n个位置（n&gt;=0向前移动，n&lt;0向后移动）后的元素，r不能为空。</p>
    <h4 id="Ring.Link">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#93">Link</a> <a class="permalink" href="#Ring.Link">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Link(s *<a href="#Ring">Ring</a>) *<a href="#Ring">Ring</a></pre>
    <p align="left">Link连接r和s，并返回r原本的后继元素r.Next()。r不能为空。</p>
    <p align="left">如果r和s指向同一个环形链表，则会删除掉r和s之间的元素，删掉的元素构成一个子链表，返回指向该子链表的指针（r的原后继元素）；如果没有删除元素，则仍然返回r的原后继元素，而不是nil。如果r和s指向不同的链表，将创建一个单独的链表，将s指向的链表插入r后面，返回s原最后一个元素后面的元素（即r的原后继元素）。</p>
    <h4 id="Ring.Unlink">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#111">Unlink</a> <a class="permalink" href="#Ring.Unlink">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Unlink(n <a href="https://godoc.org/builtin#int">int</a>) *<a href="#Ring">Ring</a></pre>
    <p>删除链表中n % r.Len()个元素，从r.Next()开始删除。如果n % r.Len() == 0，不修改r。返回删除的元素构成的链表，r不能为空。</p>
    <h4 id="Ring.Do">func (*Ring) <a title="View Source" href="http://code.google.com/p/go/source/browse/src/pkg/container/ring/ring.go?name=release#134">Do</a> <a class="permalink" href="#Ring.Do">&para;</a></h4>
    <pre class="funcdecl">func (r *<a href="#Ring">Ring</a>) Do(f func(interface{}))</pre>
    <p>对链表的每一个元素都执行f（正向顺序），注意如果f改变了*r，Do的行为是未定义的。</p>
</div>
</body>
</html>
